# 定义空列表
list = []
#类实例化方式定义
print(list)
list.insert(0,"python")
print(list)

list2 = ["web自动化","接口自动化","测试基础"]
print(list2)
# list2.insert(3,"python")
list2.insert(-1,"python")
print(list2)
list2.append("java")
print(list2)
list2.append("c")
print(list2)

# 列表元素查询
# 定义列表
name_list = ['张三', '李四', '王五']
# # 按照索引查元素
# # 查询李四
print(name_list[0])  # 张三
print(name_list[1])  # 李四
# # 查询不存在的索引
# print(name_list[4])
# # 总结：如果查询的下标（索引）不存在，则代码报错【索引超出了范围】
# # IndexError: list index out of range
#
# # 根据元素查索引
print(name_list.index("王五"))  # 下标是2


#元素统计
# 定义列表
data_list = ['python', 'java', 'python', 'php']
# 统计python出现的次数
num = data_list.count("python")
print(num)  # 次数：2
# # 统计java出现次数
print(data_list.count("java"))  # 次数：1
print(data_list.count("C++"))  # 次数：0

# 结论：
# 统计列表元素出现的次数
# 元素不存在统计结果为0

#末尾追加
# 定义列表
val_list = ["Web自动化", "UI自动化", "接口自动化"]
# 添加元素（末尾添加：APP自动化）
val_list.append("APP自动化")
# 查看原来列表
print(val_list)
# 增加数字元素
val_list.append(11)
print(val_list)
# 结论：
# 列表属于可变数据类型，增加元素后，原有的列表的值会发生变化
# 追加元素每次只能追加1个，而且每次追加的位置在列表的末尾

#列表索引位置添加
# 定义列表
val_list = ["Web自动化", "UI自动化", "接口自动化"]
val_list.insert(1,"APP自动化")
# 查看原有列表
print(val_list)  # ['Web自动化', 'APP自动化', 'UI自动化', '接口自动化']
val_list.insert(6,"java")
print(val_list)  # ['Web自动化', 'APP自动化', 'UI自动化', '接口自动化', 'java']
# 结论：
# 指定的位置如果存在，按照指定位置插入元素；如果不存在，默认添加到列表的末尾

#列表的合并
# 定义列表
info1 = [1,2,3]
info2 = [4,5,6]
# 合并
info1.extend(info2)
# info2.extend(info1)
# 查看原来列表1
print(info1)  # [1, 2, 3, 4, 5, 6]
print(info2)  # [4, 5, 6]


#列表元素删除
# 定义列表
val_list = ['Web自动化', 'APP自动化', 'UI自动化', '接口自动化', 'java']
# 删除下标为2对应元素
val_list.pop(2)     #删除不传入索引时，默认删除列表最后一个数据（元素）
# 查看原有列表
print(val_list)
# 下标为空删除
val_list.pop()
print(val_list)
# 删除下标为7的元素
# val_list.pop(7)  # IndexError: pop index out of range
print(val_list)
# 结论：
# 1.下标存在直接按照指定下标删除;如果下标不存在，直接报错
# 2.如果下标不写，默认删除最后一个元素

# 列表元素删除
# 定义列表
val_list = ['Web自动化', 'APP自动化', 'java', 'UI自动化', '接口自动化', 'java']
# 删除：“APP自动化”
val_list.remove('APP自动化')
# 查看原有列表
print(val_list)  # ['Web自动化', 'java', 'UI自动化', '接口自动化', 'java']
# # 删除：java
val_list.remove('java')
print(val_list)  # ['Web自动化', 'UI自动化', '接口自动化', 'java']
# 删除：python
# val_list.remove("python")  # 报错：ValueError: list.remove(x): x not in list
# 总结：
# 1. 如果元素存在直接删除，如果存在多个元素默认删除第一个匹配到的
# 2. 如果元素不不存在直接删除，报错



#列表元素修改
# 定义列表
val_list =  ["Web自动化", "UI自动化", "接口自动化", "APP自动化"]
# 把UI自动化修改为性能自动化
val_list[1] = "性能自动化"
# 查看原有列表
print(val_list)
# 指定下标为5的数据修改为：python
# val_list[5] = "python"  # IndexError: list assignment index out of range
# 结论
# 1.下标存在直接修改对应位置的元素；下标不存在直接报错

# 列表元素反转：元素倒置（反转）
# 定义列表
info = [8, 100, 30, 10, 40, 2]
# 反转
info.reverse()
# 查看原有列表
print(info)  # [2, 40, 10, 30, 100, 8]


# 列表元素排序：大小排列🏴
# 定义列表
info = [8, 100, 30, 10, 40, 2]
# 从小到大排序
info.sort()
# info.sort(reverse=False)
# 查看原有列表
print(info)
# 从大到小排序
info.sort(reverse=True)
print(info)
# 结论：
# 1.sort内部有常见两个参数，key:表示按照哪个指标排序（key的值必须是一个函数），reverse:表示排序规则（升序/降序）
# 2.reverse=False表示升序（默认可以不写）；如果reverse=True表示降序

# 表的嵌套元素获取：列表中的元素还是列表🏴
# 定义列表
# 列表中的元素还是列表：列表嵌套
student_list = [["张三", "18", "功能测试"], ["李四", "20", "自动化测试"], ["王五", "22", ["python", "java"]]]
# 获取指定的元素
# 查找元素18，如何查找？
print(student_list[0])
aa = student_list[0]  # ['张三', '18', '功能测试']
print(aa[1])  # 18
# # 合并起来
print(student_list[0][1])  # 18
# # 查找李四
print(student_list[1][0])  # 李四
# # 查找java
print(student_list[2][2][1])  # java


# 列表的嵌套：列表中的元素还是列表
# 登录页面为例
# 需求：分别使用不同的数据（包括手机号、密码、验证码）进行登录验证
# 结果：账号或密码错误；验证码错误；登录成功

# 定义非空列表(把每种测试结果的数据放在一起)
login_data = [
    ["13488888888", "666666", "8888"],
    ["13488888880", "123456", "8888"],
    ["13488888888", "123456", "0000"],
    ["13488888888", "123456", "8888"]
]
# 遍历
for i in login_data:
    # print(i) # 每一个中括号的数据 ，i = ["13488888888", "123456", "8888"]
    # 判断手机号和密码
    if i[0] == "13488888888" and i[1] == "123456":
        # 判断验证码
        if i[2] == "8888":
            print("登录成功")
        else:
            print("验证码错误")
    else:
        print("用户名或密码错误")


#列表_练习
list = [1,2,3,4,1,6,5,61,1,1,1,1]
# while 1 in list:
#     list.remove(1)
# print(list)

for i in list:
    list.remove(1)
print(list)


